package org.budo.sms.service.wangshi;

import java.util.Map;

import org.budo.support.http.client.Request;
import org.budo.support.http.client.Response;
import org.budo.support.lang.util.MapUtil;

import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

/**
 * @author lmw
 */
@Slf4j
@Getter
@Setter
public class BudoWangShiSmsServiceImpl implements BudoWangShiSmsService {
    private static final Map<String, Object> ERROR_MAP = MapUtil.stringObjectMap( //
            "-1", "uid或密码为空", //
            "-2", "下发号码为空", //
            "-3", "下发内容为空", //
            "-4", "内容超长", //
            "-5", "下发号码超长", //
            "-6", "uid或密码不正确", //
            "-7", "余额不足", //
            "-8", "ip鉴权未通过", //
            "-9", "协议类型不对", //
            "-99", "系统异常" //
    );

    private String uid;

    private String pw;

    private String ex = "77";

    @Override
    public String sendSms(String to, String template, Map<String, Object> parameters) {
        String url = "http://123.57.43.178:18002/send.do?uid=" + this.getUid() //
                + "&pw=" + this.getPw() //
                + "&mb=" + to //
                + "&ms=" + template //
                + "&ex=" + this.getEx();

        Request request = new Request();
        request.setUrl(url);

        Response response = request.execute();

        String responseBody = response.getBody();

        if (null == responseBody || responseBody.startsWith("-")) {
            log.error("#41 response=" + response + ", error = " + ERROR_MAP.get(responseBody.trim()) + ", request=" + request);
            return responseBody + ERROR_MAP.get(responseBody);
        }

        log.info("#43 response=" + response + ", request=" + request);
        return responseBody;
    }
}

// 状态回调
// REJECT   驳回（内容不发，格式不正确，客户要求终止）
// BLACK   黑名单
// MILIMIT  分钟限
// MI5LIMI  5分钟限
// HLIMIT   小时限
// H12LIMI  12小时限
// DLIMIT   天限
// D3LIMI   3天限
// D7LIMIT  7天限
// ROUTERR 路由驳回或者屏蔽地区，一般都是屏蔽地区
// SENDERR 一般都是提交失败会给客户返回这个状态
// UNDELIV 失败（标准的失败、号码问题、内容不符，具体可以找客服查询）黑名单
// LIMIT   超频（具体情况可找客服查询）
// KL:0008 超速（超过通道最大发送速度）
// KEYWORD 关键字
// MUSTNOT 携号转网失败